<?php

// 在标准模式下订单状态在顺序变化：订单状态: 1新订单; 2已支付; 3已接单; 4已发货; 5已收货; 6交易完成; 
// 用户自提
// 方便生成每个店铺的订单列表
// 非现金购买
// 缺货处理
// 如何处理退货
// 可以处理预订

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateOrdersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('orders', function (Blueprint $table) {
            // 基本信息
            $table->increments('id');
            $table->string('sn')->comment('[v1.0]订单号');
            $table->integer('user_id')->comment('[v1.0]用户ID');
            $table->string('postscript')->nullable()->comment('[v1.0]顾客留言');
            $table->integer('merchant_id')->default(0)->comment('[v1.0]店铺ID，如果是商品包含多家店铺商品，则需要拆单。');
            $table->string('separate_order_sn')->nullable()->comment('[v1.0]多商家统一结算主订单号');
            $table->integer('channel')->nullable()->comment('[v1.0]生成订单的渠道');

            // 管理
            $table->tinyInteger('status')->default(0)->comment('[v1.0]订单状态: 0临时保存订单; 1新订单; 2已支付; 3已接单; 4已发货; 5已收货; 6交易完成; 7取消订单; 8无效订单; 9已分单; ');
            $table->string('remark')->nullable()->comment('[v1.0]商户备注');
            $table->string('cancel_reason')->nullable()->comment('[v1.0]取消原因');
            
            // 完成时间
            $table->timestamp('accept_at')->nullable()->comment('[v1.0]接单时间');
            $table->timestamp('complete_at')->nullable()->comment('[v1.0]订单完成时间');
            $table->timestamps();
            $table->softDeletes();
        });

        Schema::create('order_goods', function (Blueprint $table) {
            $table->increments('id');

            $table->integer('order_id')->comment('[v1.0]订单id');
            $table->integer('merchant_id')->default(0)->comment('[v1.0]商品是从哪个店铺购买的。');

            // 商品基本信息
            $table->integer('goods_id')->nullable()->comment('[v1.0]商品id，如果商品来从 goods 表则填写此字段。');
            $table->string('name')->comment('[v1.0]商品的名称');
            $table->text('attributes')->nullable()->comment('[v1.0]购买该商品时所选择的属性');
            
            // 购买信息
            $table->integer('quantity')->comment('商品的购买数量');
            
            // 收费信息
            $table->integer('price')->nullable()->comment('[v1.0]商品售价，单位分，为空时表示不支持现金支付。');
            $table->integer('market_price')->nullable()->comment('[v1.0]市场售价');
            
            // 附加信息
            $table->string('specification')->nullable()->comment('[v1.0]规格');
            $table->string('brand', 60)->nullable()->comment('[v1.0]品牌');
            $table->string('brief')->nullable()->comment('[v1.0]商品的简短描述');
            $table->text('desc')->nullable()->comment('[v1.0]商品的详细描述');
            $table->string('thumb')->nullable()->comment('[v1.0]商品在前台显示的微缩图片，如在分类筛选时显示的小图片。');
            $table->tinyInteger('type')->unsigned()->default(0)->comment('[v1.0]0 实物；1 虚拟；2 熟食；3 散装；');
            // $table->boolean('is_gift')->comment('是否参加优惠活动，0，否；其他，取值于cart的is_gift，跟其一样，是参加的优惠活动的id');
            
            $table->timestamps();
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('orders');
        Schema::dropIfExists('order_goods');
    }
}
